|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ ПроГаусс+; (****************************************************************************** * НАЗНАЧЕНИЕ: * решение систем линейных уравнений (A*x=b) методом исключений Гаусса * * ПРИМЕЧАНИЯ: * В данном приложении метод применяется для решения последовательности * систем Гильберта увеличивающегося порядка. Системы Гильберта имеют * плохо обусловленные матрицы (определитель близок к 0), поэтому, при * существующей точности вычислений, начиная с некоторого порядка системы * такие матрицы будут рассматриваться алгоритмом, как вырожденные. Это * произойдет после того, как определитель системы станет меньше Матем.МАШЕПС. ******************************************************************************) ИСПОЛЬЗУЕТ Вект ИЗ "...\Отделы\Числа\", Матр ИЗ "...\Отделы\Числа\", МатрВВ ИЗ "...\Отделы\Числа\", Вывод ИЗ "...\Отделы\Обмен\"; (******************************************************************************) ЗАДАЧА Гильберт(A+:Матр.Вид; b+:Вект.Вид); (* Построение системы Гильберта n-го порядка A[0..n-1,0..n-1] = матрица системы: ( 1 1/2 1/3 1/4 ... 1/n ) ( 1/2 1/3 1/4 1/5 ... 1/(n+1) ) A = ( 1/3 1/4 1/5 1/6 ... 1/(n+2) ) ( ........................................... ) ( 1/n 1/(n+1) 1/(n+2) 1/(n+3) ... 1/(2N-1) ) b[0..n-1] = вектор свободных членов: n b[i] = Sum A[i,j] j=1 Тогда вектор решения будет x = [1 1 1 ... 1] *) ПЕР i,j,посл:ЦЕЛ; УКАЗ посл:=РАЗМЕР(A)-1; (* первая строка *) A[0,0]:=1; ОТ j:=1 ДО посл ВЫП A[0,j]:=1/(j+1) КОН; (* оставшиеся строки *) ОТ i:=1 ДО посл ВЫП (* последний столбец *) A[i,посл]:=1/(посл+i+1); (* заполнить матрицу *) ОТ j:=0 ДО посл-1 ВЫП A[i,j]:=A[i-1,j+1] КОН КОН; (* вектор постоянных членов *) ОТ i:=0 ДО посл ВЫП b[i]:=0; ОТ j:=0 ДО посл ВЫП b[i]:=b[i]+A[i,j] КОН КОН КОН Гильберт; (******************************************************************************) ЗАДАЧА Голова; ПЕР n:ЦЕЛ; (* порядок системы *) A :Матр.Доступ; (* матрица системы *) Ao:Матр.Доступ; (* обратная матрица *) b :Вект.Доступ; (* вектор свободных членов *) x :Вект.Доступ; (* вектор решения *) УКАЗ n:=2; КОЛЬЦО Вывод.ЧЦел("^Порядок системы: %d^",n,0,0,0); СОЗДАТЬ(A,n,n); СОЗДАТЬ(Ao,n,n); СОЗДАТЬ(b,n); СОЗДАТЬ(x,n); Гильберт(A^,b^); ЕСЛИ n < 7 ТО Вывод.Цепь("^Матрица системы:^"); МатрВВ.ВыводМатр("%8.4f",A^); Вывод.Цепь("^Свободные члены:^"); МатрВВ.ВыводВект("%8.4f",b^) КОН; ЕСЛИ Матр.МетодГаусса(A^,b^,Ao^,x^) = 0 ТО Вывод.Цепь("^Вектор решения:^"); МатрВВ.ВыводВект("%8.4f",x^); ИНАЧЕ Вывод.Цепь("^Вырожденная матрица!^"); ВЫХОД КОН; УВЕЛИЧИТь(n) КОН КОН Голова; (******************************************************************************) УКАЗ Голова КОН ПроГаусс. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|